home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / demo / flowdemo.zip / SETUPAPI.IN_ / SETUPAPI.IN
Text File  |  1994-06-20  |  35KB  |  1,082 lines

  1. '**************************************************************************
  2. '*******************************  Windows API's  **************************
  3. '**************************************************************************
  4. GLOBAL hSetup AS INTEGER
  5. GLOBAL fFrameInit AS INTEGER
  6. GLOBAL fInstallInit AS INTEGER
  7.  
  8. CONST SM_CXSCREEN = 0
  9. CONST SM_CYSCREEN = 1
  10.  
  11. CONST WF_80x87    = 1024
  12. CONST WF_CPU186   =  128
  13. CONST WF_CPU286   =    2
  14. CONST WF_CPU386   =    4
  15. CONST WF_CPU486   =    8
  16. CONST WF_STANDARD =   16
  17. CONST WF_ENHANCED =   32
  18.  
  19.  
  20. '' DoMsgBox Flags
  21.  
  22. CONST MB_OK          = 0
  23. CONST MB_ICONHAND    = 16
  24. CONST MB_TASKMODAL   = 8192
  25.  
  26.  
  27. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  28. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  29. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  30. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  31. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  32. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  33. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  34.  
  35.  
  36.  
  37.  
  38. '**************************************************************************
  39. '****************************** Setup Constants ***************************
  40. '**************************************************************************
  41.  
  42.  
  43. ''Command Option Flags
  44.  
  45. CONST cmoVital       = 1
  46. CONST cmoCopy        = 2
  47. CONST cmoUndo        = 4
  48. CONST cmoRoot        = 8
  49. CONST cmoDecompress  = 16
  50. CONST cmoTimeStamp   = 32
  51. CONST cmoReadOnly    = 64
  52. CONST cmoBackup      = 128
  53. CONST cmoForce       = 256
  54. CONST cmoRemove      = 512
  55. CONST cmoOverwrite   = 1024
  56. CONST cmoAppend      = 2048
  57. CONST cmoPrepend     = 4096
  58. CONST cmoNone        = 0
  59. CONST cmoAll         = 65535
  60.  
  61.  
  62. ''File Exist Modes
  63.  
  64. CONST femExists     = 0
  65. CONST femRead       = 1
  66. CONST femWrite      = 2
  67. CONST femReadWrite  = 3
  68.  
  69.  
  70. ''Read-Only Return Code
  71.  
  72. CONST ynrcNo         = 0
  73. CONST ynrcYes        = 1
  74. CONST ynrcErr1       = 2
  75. CONST ynrcErr2       = 3
  76. CONST ynrcErr3       = 4
  77. CONST ynrcErr4       = 5
  78. CONST ynrcErr5       = 6
  79. CONST ynrcErr6       = 7
  80. CONST ynrcErr7       = 8
  81. CONST ynrcErr8       = 9
  82. CONST ynrcErr9       = 10
  83.  
  84.  
  85. ''General Return Codes
  86.  
  87. CONST grcOkay       = 0
  88. CONST grcNotOkay    = 1
  89. CONST grcUserQuit   = 48
  90.  
  91.  
  92. ''Ranges
  93.  
  94. ''CONST cbSymValMax = 8192
  95. CONST cbSymValMax = 512
  96.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  97.     '' but we get Out of String Space wattdrvr error if we alloc
  98.     '' STRING$() that big. (See GetSymbolValue and GetListItem)
  99.     '' We should look into using dynamic far alloc instead of
  100.     '' STRING$ for large buffers.
  101.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  102.  
  103.  
  104. ''ON ERROR Error Codes
  105. CONST STFERR      = 1024   ''setup system error
  106. CONST STFQUIT     = 1025   ''user quit
  107.  
  108. CONST scmOff      = 0
  109. CONST scmOnIgnore = 1
  110. CONST scmOnFatal  = 2
  111.  
  112.  
  113. '**************************************************************************
  114. '********************************  Setup API's  ***************************
  115. '**************************************************************************
  116.  
  117. '' common
  118.  
  119. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  120. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  121. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  122. DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
  123. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  124. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  125. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  126. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  127. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  128. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  129. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  130.  
  131.  
  132. ''shell
  133.  
  134. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  135. DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
  136. DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
  137. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  138. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  139. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  140. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  141. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  142. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  143. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  144. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  145. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  146. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  147.  
  148.  
  149. ''shell
  150.  
  151. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  152. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  153. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  154.  
  155.  
  156.  
  157. ''install
  158.  
  159. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  160. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  161. DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  162. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  163. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  164. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  165. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  166. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  167. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  168. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  169. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  170. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  171. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  172. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  173. DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
  174. DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  175. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  176. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  177. DECLARE FUNCTION FAddDos5Help LIB "msinsstf.dll" (szProgName$, szProgHelp$, cmo%) AS INTEGER
  178. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  179. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  180. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  181. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  182. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  183. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  184. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  185. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  186. DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
  187. DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  188. DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  189. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  190. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  191. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  192. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  193. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  194. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  195. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  196.  
  197. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  198.  
  199.  
  200.  
  201. '*************************************************************************
  202. '****************  Setup Basic Wrapper Declarations  *********************
  203. '*************************************************************************
  204.  
  205.  
  206. ''shell
  207.  
  208. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  209. DECLARE SUB SetAbout(szAbout1$, szAbout2$)
  210. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  211. DECLARE SUB UIPop (n%)
  212. DECLARE SUB UIPopAll
  213. DECLARE SUB SetTitle (sz$)
  214. DECLARE SUB ReadInfFile (szFile$)
  215. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  216. DECLARE SUB RemoveSymbol (szSym$)
  217. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  218. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  219. DECLARE SUB MakeListFromSectionKeys (szSymbol$, szSect$)
  220. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  221. DECLARE SUB AddListItem(szSymbol$, szItem$)
  222. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  223.  
  224. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  225. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  226.  
  227. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  228. DECLARE SUB RestoreCursor (hPrev%)
  229.  
  230. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  231. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  232.  
  233. DECLARE FUNCTION GetSectionKeyDate (szSect$, szKey$) AS STRING
  234. DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
  235. DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
  236. DECLARE FUNCTION GetSectionKeyVersion (szSect$, szKey$) AS STRING
  237.  
  238. DECLARE SUB MakeListFromSectionDate (szSym$, szSect$)
  239. DECLARE SUB MakeListFromSectionFilename (szSym$, szSect$)
  240. DECLARE SUB MakeListFromSectionSize (szSym$, szSect$)
  241. DECLARE SUB MakeListFromSectionVersion (szSym$, szSect$)
  242.  
  243.  
  244. ''install
  245.  
  246.  
  247. DECLARE SUB CreateDir (szDir$, cmo%)
  248. DECLARE SUB RemoveDir (szDir$, cmo%)
  249. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  250. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  251. DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  252. DECLARE SUB CopyFilesInCopyList
  253. DECLARE SUB RemoveIniSection (szFile$, szSect$, cmo%)
  254. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  255. DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  256. DECLARE SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  257. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  258. DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  259. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  260. DECLARE SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  261. DECLARE SUB DumpCopyList (szFile$)
  262. DECLARE SUB ClearCopyList
  263. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  264. DECLARE SUB AddDos5Help (szProgName$, szProgHelp$, cmo%)
  265. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  266. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  267. DECLARE SUB BackupFile (szFullPath$, szBackup$)
  268. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  269. DECLARE SUB InitInstall
  270. DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  271. DECLARE SUB AddBlankToBillboardList (lTicks&)
  272. DECLARE SUB ClearBillboardList
  273. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  274. DECLARE SUB CloseLogFile
  275. DECLARE SUB WriteToLogFile (szStr$)
  276. DECLARE SUB SetCopyGaugePosition (x%, y%)
  277. DECLARE SUB SetRestartDir(szDir$)
  278. DECLARE FUNCTION RestartListEmpty AS INTEGER
  279. DECLARE FUNCTION ExitExecRestart AS INTEGER
  280. DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  281. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  282. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  283. DECLARE FUNCTION GetNthFieldFromIniString (szLine$, iField%) AS STRING
  284. DECLARE SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  285.  
  286.  
  287. '' Error Handling
  288.  
  289.  
  290. '' Windows system detect
  291.  
  292. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  293. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  294. DECLARE FUNCTION GetWindowsMode AS INTEGER
  295. DECLARE FUNCTION GetWindowsDir  AS STRING
  296. DECLARE FUNCTION GetWindowsSysDir AS STRING
  297. DECLARE FUNCTION IsWindowsShared AS INTEGER
  298. DECLARE FUNCTION GetScreenWidth AS INTEGER
  299. DECLARE FUNCTION GetScreenHeight AS INTEGER
  300.  
  301.  
  302. '*************************************************************************
  303. '*****************  Setup Basic Wrapper Definitions  *********************
  304. '*************************************************************************
  305. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  306.     fFrameInit = 0
  307.     fInstallInit = 0
  308.  
  309.     IF hSetup > 0 THEN
  310.     END IF
  311.  
  312.     i% = InitFrame(szCmdLine$)
  313.     fFrameInit = 1
  314.  
  315.     InitInstall
  316.     fInstallInit = 1
  317.  
  318.     InitSetup = i%
  319. END FUNCTION
  320.  
  321.  
  322.  
  323. '**************************************************************************
  324. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  325.     IF hSetup <= 0 THEN
  326.         i% = InitializeFrame(szCmdLine$)
  327.         IF i% = -1 THEN
  328.             END   '' NOT an error - Usage (/?) or Command line copy operation
  329.         ELSEIF i% = 0 THEN
  330.             END
  331.         ELSE
  332.             InitFrame = i%
  333.         END IF
  334.     END IF
  335. END FUNCTION
  336.  
  337.  
  338. '**************************************************************************
  339. SUB SetBitmap(szDll$, Bitmap%) STATIC
  340.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  341.         ERROR STFERR
  342.     END IF
  343. END SUB
  344.  
  345.  
  346. '**************************************************************************
  347. SUB SetAbout(szAbout1$, szAbout2$) STATIC
  348.     IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
  349.         ERROR STFERR
  350.     END IF
  351. END SUB
  352.  
  353.  
  354. '*************************************************************************
  355. SUB SetTitle(sz$) STATIC
  356.     SetWindowText HwndFrame(), sz$
  357. END SUB
  358.  
  359.  
  360. '*************************************************************************
  361. SUB ReadInfFile (szFile$) STATIC
  362.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  363.         ERROR STFERR
  364.     END IF
  365. END SUB
  366.  
  367.  
  368. '*************************************************************************
  369. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  370.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  371.         ERROR STFERR
  372.     ELSE
  373.         UIStartDlg = GetSymbolValue("DLGEVENT")
  374.     END IF
  375. END FUNCTION
  376.  
  377.  
  378. '*************************************************************************
  379. SUB UIPop (n%) STATIC
  380.     IF FKillNDialogs(n%) = 0 THEN
  381.         ERROR STFERR
  382.     END IF
  383. END SUB
  384.  
  385.  
  386. '*************************************************************************
  387. SUB UIPopAll STATIC
  388.     IF FKillNDialogs(65535) = 0 THEN
  389.         ERROR STFERR
  390.     END IF
  391. END SUB
  392.  
  393.  
  394. '*************************************************************************
  395. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  396.     szValue$ = string$(cbSymValMax,32)
  397.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  398.     GetSymbolValue = szValue$
  399.     IF Length% >= cbSymValMax THEN
  400.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  401.         ERROR STFERR
  402.     END IF
  403.     IF szSymbol$ = "" THEN
  404.         ERROR STFERR
  405.     END IF
  406.     szValue$ = ""
  407. END FUNCTION
  408.  
  409.  
  410. '*************************************************************************
  411. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  412.     GetListLength = UsGetListLength(szSymbol$)
  413.     IF szSymbol$ = "" THEN
  414.         ERROR STFERR
  415.     END IF
  416. END FUNCTION
  417.  
  418.  
  419. '*************************************************************************
  420. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  421.     szListItem$ = string$(cbSymValMax,32)
  422.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  423.     GetListItem = szListItem$
  424.     IF Length% >= cbSymValMax THEN
  425.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  426.         ERROR STFERR
  427.     END IF
  428.     IF szListSymbol$ = "" THEN
  429.         ERROR STFERR
  430.     END IF
  431.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  432.         ERROR STFERR
  433.     end if
  434.     szListItem$ = ""
  435. END FUNCTION
  436.  
  437.  
  438. '*************************************************************************
  439. SUB AddListItem(szSymbol$, szItem$) STATIC
  440.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  441.         ERROR STFERR
  442.     END IF
  443. END SUB
  444.  
  445.  
  446. '*************************************************************************
  447. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  448.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  449.         ERROR STFERR
  450.     END IF
  451. END SUB
  452.  
  453.  
  454. '**************************************************************************
  455. SUB MakeListFromSectionKeys(szSymbol$, szSect$) STATIC
  456.     IF FSetSymbolToListOfInfKeys(szSymbol$, szSect$, 1) = 0 THEN
  457.         ERROR STFERR
  458.     END IF
  459. END SUB
  460.  
  461.  
  462. '*************************************************************************
  463. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  464.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  465.         ERROR STFERR
  466.     END IF
  467. END SUB
  468.  
  469.  
  470. '*************************************************************************
  471. SUB RemoveSymbol(szSym$) STATIC
  472.     IF FRemoveSymbol(szSym$) = 0 THEN
  473.         ERROR STFERR
  474.     END IF
  475. END SUB
  476.  
  477.  
  478. '*************************************************************************
  479. FUNCTION ShowWaitCursor STATIC AS INTEGER
  480.     ShowWaitCursor = HShowWaitCursor
  481. END FUNCTION
  482.  
  483.  
  484. '*************************************************************************
  485. SUB RestoreCursor (hPrev%) STATIC
  486.     i% = FRestoreCursor(hPrev%)
  487.     IF i% = 0 THEN
  488.         ERROR STFERR
  489.     END IF
  490. END SUB
  491.  
  492.  
  493. '*************************************************************************
  494. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  495.     SetBeepingMode = FSetBeepingMode(mode%)
  496. END FUNCTION
  497.  
  498.  
  499. '*************************************************************************
  500. FUNCTION SetSilentMode (mode%) STATIC AS INTEGER
  501.     SetSilentMode = FSetSilent(mode%)
  502. END FUNCTION
  503.  
  504.  
  505. '*************************************************************************
  506. FUNCTION GetSectionKeyDate (szSect$, szKey$) STATIC AS STRING
  507.     szBuf$ = string$(128, 32)
  508.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 5, szBuf$, 128)
  509.     IF Length% >= 128 THEN
  510.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  511.         ERROR STFERR
  512.     END IF
  513.  
  514.     IF Length% = -1 THEN
  515.         ERROR STFERR
  516.     END IF
  517.  
  518.     GetSectionKeyDate = szBuf$
  519.     szBuf$ = ""
  520. END FUNCTION
  521.  
  522.  
  523. '*************************************************************************
  524. FUNCTION GetSectionKeyFilename (szSect$, szKey$) STATIC AS STRING
  525.     szBuf$ = string$(128, 32)
  526.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 1, szBuf$, 128)
  527.     IF Length% >= 128 THEN
  528.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  529.         ERROR STFERR
  530.     END IF
  531.  
  532.     IF Length% = -1 THEN
  533.         ERROR STFERR
  534.     END IF
  535.  
  536.     GetSectionKeyFilename = szBuf$
  537.     szBuf$ = ""
  538. END FUNCTION
  539.  
  540.  
  541. '*************************************************************************
  542. FUNCTION GetSectionKeySize (szSect$, szKey$) STATIC AS LONG
  543.     szBuf$ = string$(128, 32)
  544.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 15, szBuf$, 128)
  545.     IF Length% >= 128 THEN
  546.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  547.         ERROR STFERR
  548.     END IF
  549.  
  550.     IF Length% = -1 THEN
  551.         ERROR STFERR
  552.     END IF
  553.  
  554.     GetSectionKeySize = VAL(szBuf$)
  555.     szBuf$ = ""
  556. END FUNCTION
  557.  
  558.  
  559. '*************************************************************************
  560. FUNCTION GetSectionKeyVersion (szSect$, szKey$) STATIC AS STRING
  561.     szBuf$ = string$(128, 32)
  562.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 19, szBuf$, 128)
  563.     IF Length% >= 128 THEN
  564.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  565.         ERROR STFERR
  566.     END IF
  567.  
  568.     IF Length% = -1 THEN
  569.         ERROR STFERR
  570.     END IF
  571.  
  572.     GetSectionKeyVersion = szBuf$
  573.     szBuf$ = ""
  574. END FUNCTION
  575.  
  576.  
  577. '*************************************************************************
  578. SUB MakeListFromSectionDate (szSym$, szSect$) STATIC
  579.     IF FMakeListInfSectionField(szSym$, szSect$, 5) = 0 THEN
  580.         ERROR STFERR
  581.     END IF
  582. END SUB
  583.  
  584.  
  585. '*************************************************************************
  586. SUB MakeListFromSectionFilename (szSym$, szSect$) STATIC
  587.     IF FMakeListInfSectionField(szSym$, szSect$, 1) = 0 THEN
  588.         ERROR STFERR
  589.     END IF
  590. END SUB
  591.  
  592.  
  593. '*************************************************************************
  594. SUB MakeListFromSectionSize (szSym$, szSect$) STATIC
  595.     IF FMakeListInfSectionField(szSym$, szSect$, 15) = 0 THEN
  596.         ERROR STFERR
  597.     END IF
  598. END SUB
  599.  
  600.  
  601. '*************************************************************************
  602. SUB MakeListFromSectionVersion (szSym$, szSect$) STATIC
  603.     IF FMakeListInfSectionField(szSym$, szSect$, 19) = 0 THEN
  604.         ERROR STFERR
  605.     END IF
  606. END SUB
  607.  
  608.  
  609. '*************************************************************************
  610. SUB InitInstall STATIC
  611.     IF hSetup > 0 THEN
  612.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  613.         END
  614.     END IF
  615. END SUB
  616.  
  617.  
  618. '*************************************************************************
  619. SUB CreateDir (szDir$, cmo%) STATIC
  620.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  621.         ERROR STFERR
  622.     END IF
  623. END SUB
  624.  
  625.  
  626. '*************************************************************************
  627. SUB RemoveDir (szDir$, cmo%) STATIC
  628.     IF FRemoveDir(szDir$, cmo%) = 0 THEN
  629.         ERROR STFERR
  630.     END IF
  631. END SUB
  632.  
  633.  
  634.  
  635. '*************************************************************************
  636. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  637.     IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  638.         ERROR STFERR
  639.     END IF
  640. END SUB
  641.  
  642.  
  643. '*************************************************************************
  644. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  645.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  646.         ERROR STFERR
  647.     END IF
  648. END SUB
  649.  
  650.  
  651. '*************************************************************************
  652. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  653.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  654.         ERROR STFERR
  655.     END IF
  656. END SUB
  657.  
  658.  
  659. '*************************************************************************
  660. SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  661.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  662.         ERROR STFERR
  663.     END IF
  664. END SUB
  665.  
  666.  
  667. '*************************************************************************
  668. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  669.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  670.         ERROR STFERR
  671.     END IF
  672. END SUB
  673.  
  674.  
  675. '*************************************************************************
  676. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  677.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  678.         ERROR STFERR
  679.     END IF
  680. END SUB
  681.  
  682.  
  683. '*************************************************************************
  684. SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) STATIC
  685.     IF FStampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) = 0 THEN
  686.         ERROR STFERR
  687.     END IF
  688. END SUB
  689.  
  690.  
  691. '*************************************************************************
  692. SUB DumpCopyList (szFile$) STATIC
  693.     IF FDumpCopyListToFile (szFile$) = 0 THEN
  694.         ERROR STFERR
  695.     END IF
  696. END SUB
  697.  
  698.  
  699. '*************************************************************************
  700. SUB ClearCopyList STATIC
  701.     ResetCopyList
  702. END SUB
  703.  
  704.  
  705. '*************************************************************************
  706. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  707.     lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  708.     IF lNeed& < 0 THEN
  709.         ERROR STFERR
  710.     END IF
  711.     GetCopyListCost = lNeed&
  712. END FUNCTION
  713.  
  714.  
  715. '*************************************************************************
  716. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  717.     szItemNew$ = szItem$
  718.     IF szOther$ <> "" THEN
  719.         szItemNew$ = szItem$ + "," + szOther$
  720.     END IF
  721.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  722.         ERROR STFERR
  723.     END IF
  724.     szItemNew$ = ""
  725. END SUB
  726.  
  727.  
  728. '*************************************************************************
  729. SUB AddDos5Help (szProgName$, szProgHelp$, cmo%) STATIC
  730.     IF FAddDos5Help (szProgName$, szProgHelp$, cmo%) = 0 THEN
  731.         ERROR STFERR
  732.     END IF
  733. END SUB
  734.  
  735.  
  736. '*************************************************************************
  737. SUB CopyFilesInCopyList STATIC
  738.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  739.  
  740.     IF grc% = grcUserQuit THEN
  741.         ERROR STFQUIT
  742.     ELSEIF grc% > 0 THEN
  743.         ERROR STFERR
  744.     END IF
  745. END SUB
  746.  
  747.  
  748. '*************************************************************************
  749. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  750.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  751.         ERROR STFERR
  752.     END IF
  753. END SUB
  754.  
  755.  
  756.  
  757. '*************************************************************************
  758. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  759.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  760.         ERROR STFERR
  761.     END IF
  762. END SUB
  763.  
  764.  
  765. '*************************************************************************
  766. SUB BackupFile (szFullPath$, szBackup$) STATIC
  767.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  768.         ERROR STFERR
  769.     END IF
  770. END SUB
  771.  
  772.  
  773. '*************************************************************************
  774. SUB RenameFile (szFullPath$, szBackup$) STATIC
  775.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  776.         ERROR STFERR
  777.     END IF
  778. END SUB
  779.  
  780.  
  781. '*************************************************************************
  782. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  783.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  784.         ERROR STFERR
  785.     END IF
  786. END SUB
  787.  
  788.  
  789. '*************************************************************************
  790. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  791.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  792.         ERROR STFERR
  793.     END IF
  794. END SUB
  795.  
  796.  
  797. '*************************************************************************
  798. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  799.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  800.         ERROR STFERR
  801.     END IF
  802. END SUB
  803.  
  804.  
  805. '*************************************************************************
  806. SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&) STATIC
  807.     IF FAddToBillboardList(szDll$, idDlg%, szProc$, lTicks&) = 0 THEN
  808.         ERROR STFERR
  809.     END IF
  810. END SUB
  811.  
  812.  
  813. '*************************************************************************
  814. SUB AddBlankToBillboardList (lTicks&) STATIC
  815.     IF FAddToBillboardList(NULL, 0, NULL, lTicks&) = 0 THEN
  816.         ERROR STFERR
  817.     END IF
  818. END SUB
  819.  
  820.  
  821. '*************************************************************************
  822. SUB ClearBillboardList STATIC
  823.     IF FClearBillboardList = 0 THEN
  824.         ERROR STFERR
  825.     END IF
  826. END SUB
  827.  
  828.  
  829. '*************************************************************************
  830. SUB OpenLogFile (szFile$, fAppend%) STATIC
  831.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  832.         ERROR STFERR
  833.     END IF
  834. END SUB
  835.  
  836.  
  837. '*************************************************************************
  838. SUB CloseLogFile STATIC
  839.     IF FCloseLogFile() = 0 THEN
  840.         ERROR STFERR
  841.     END IF
  842. END SUB
  843.  
  844.  
  845. '*************************************************************************
  846. SUB WriteToLogFile (szStr$) STATIC
  847.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  848.         ERROR STFERR
  849.     END IF
  850. END SUB
  851.  
  852.  
  853. ''' -1 in either parameter will mean 'center in frame client area'
  854. '*************************************************************************
  855. SUB SetCopyGaugePosition (x%, y%) STATIC
  856.     ProSetPos x%, y%
  857. END SUB
  858.  
  859.  
  860. '*************************************************************************
  861. FUNCTION FindFileUsingFileOpen (szFile$) STATIC AS STRING
  862.     szBuf$ = STRING$(512, 32)
  863.  
  864.     wRet% = WFindFileUsingFileOpen(szFile$, szBuf$, len(szBuf$))
  865.     IF wRet% = 0 THEN
  866.         FindFileUsingFileOpen = szBuf$
  867.     ELSEIF wRet% = 1 THEN
  868.         FindFileUsingFileOpen = ""
  869.     ELSE
  870.         ERROR STFERR
  871.     END IF
  872.  
  873.     szBuf$ = ""
  874. END FUNCTION
  875.  
  876.  
  877. '*************************************************************************
  878. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  879.     IsDirWritable = FIsDirWritable(szDir$)
  880. END FUNCTION
  881.  
  882.  
  883. '*************************************************************************
  884. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  885.     IsFileWritable = FIsFileWritable(szFile$)
  886. END FUNCTION
  887.  
  888.  
  889. '*************************************************************************
  890. FUNCTION GetNthFieldFromIniString (szLine$, iField%) STATIC AS STRING
  891.     IF iField% < 1 THEN
  892.         ERROR STFERR
  893.     END IF
  894.     szStart$ = szLine$
  895.     IF iField% <> 1 THEN
  896.         FOR i% = 2 TO iField% STEP 1
  897.             iNew% = INSTR(szStart$, ",")
  898.             IF iNew% = 0 THEN
  899.                 GetNthFieldFromIniString = ""
  900.                 GOTO _GNFFIS_END
  901.             END IF
  902.             szStart$ = MID$(szStart$, (iNew% + 1))
  903.         NEXT
  904.     END IF
  905.  
  906.     iNew% = INSTR(szStart$, ",")
  907.     IF iNew% <> 0 THEN
  908.         szStart$ = MID$(szStart$, 1, (iNew% - 1))
  909.     END IF
  910.  
  911.     GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  912.  
  913. _GNFFIS_END:
  914.  
  915. END FUNCTION
  916.  
  917.  
  918. '*************************************************************************
  919. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  920.     GetWindowsMajorVersion = GetVersion() MOD 256
  921. END FUNCTION
  922.  
  923.  
  924. '*************************************************************************
  925. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  926.     GetWindowsMinorVersion = GetVersion() / 256
  927. END FUNCTION
  928.  
  929.  
  930. '*************************************************************************
  931. FUNCTION GetWindowsMode STATIC AS INTEGER
  932.     GetWindowsMode = 0
  933.     longTmp& = GetWinFlags()
  934.     IF longTmp& AND WF_STANDARD THEN
  935.         GetWindowsMode = 1
  936.     ELSEIF longTmp& AND WF_ENHANCED THEN
  937.         GetWindowsMode = 2
  938.     END IF
  939. END FUNCTION
  940.  
  941.  
  942. '*************************************************************************
  943. FUNCTION GetWindowsDir STATIC AS STRING
  944.     szBuf$ = string$(256, 32)
  945.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  946.  
  947.     IF cbBuf% = 0 THEN
  948.         GetWindowsDir = ""
  949.         ERROR STFERR
  950.     ELSE
  951.         IF cbBuf% > 255 THEN
  952.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  953.             ERROR STFERR
  954.         END IF
  955.         szBuf$ = RTRIM$(szBuf$)
  956.         IF MID$(szBuf$, 1, 1) = "\" THEN
  957.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  958.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  959.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  960.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  961.         END IF
  962.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  963.             szBuf$ = szBuf$ + "\"
  964.         END IF
  965.         GetWindowsDir = szBuf$
  966.     END IF
  967.  
  968.     szBuf$ = ""
  969. END FUNCTION
  970.  
  971.  
  972. '*************************************************************************
  973. FUNCTION GetWindowsSysDir STATIC AS STRING
  974.     szBuf$ = string$(256, 32)
  975.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  976.  
  977.     IF cbBuf% = 0 THEN
  978.         ERROR STFERR
  979.     ELSE
  980.         IF cbBuf% > 255 THEN
  981.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  982.             ERROR STFERR
  983.         END IF
  984.         szBuf$ = RTRIM$(szBuf$)
  985.         IF MID$(szBuf$, 1, 1) = "\" THEN
  986.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  987.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  988.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  989.         END IF
  990.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  991.             szBuf$ = szBuf$ + "\"
  992.         END IF
  993.         GetWindowsSysDir = szBuf$
  994.     END IF
  995.  
  996.     szBuf$ = ""
  997. END FUNCTION
  998.  
  999.  
  1000. '*************************************************************************
  1001. FUNCTION IsWindowsShared STATIC AS INTEGER
  1002.     szWin$ = UCASE$(GetWindowsDir())
  1003.     szSys$ = UCASE$(GetWindowsSysDir())
  1004.  
  1005.     IF len(szWin$) = 0 THEN
  1006.         ERROR STFERR
  1007.     END IF
  1008.  
  1009.     IF len(szSys$) <= len(szWin$) THEN
  1010.         IsWindowsShared = 1
  1011.     ELSE
  1012.         szSys$ = MID$(szSys$, 1, len(szWin$))
  1013.         IF szWin$ = szSys$ THEN
  1014.             IsWindowsShared = 0
  1015.         ELSE
  1016.             IsWindowsShared = 1
  1017.         END IF
  1018.     END IF
  1019. END FUNCTION
  1020.  
  1021.  
  1022. '*************************************************************************
  1023. FUNCTION GetScreenWidth STATIC AS INTEGER
  1024.     GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  1025. END FUNCTION
  1026.  
  1027.  
  1028. '*************************************************************************
  1029. FUNCTION GetScreenHeight STATIC AS INTEGER
  1030.     GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  1031. END FUNCTION
  1032.  
  1033.  
  1034. '*************************************************************************
  1035. SUB SetRestartDir (szDir$) STATIC
  1036.     IF FSetRestartDir(szDir$) = 0 THEN
  1037.         ERROR STFERR
  1038.     END IF
  1039. END SUB
  1040.  
  1041.  
  1042. '*************************************************************************
  1043. FUNCTION RestartListEmpty STATIC AS INTEGER
  1044.     IF FRestartListEmpty() = 0 THEN
  1045.         RestartListEmpty = 0
  1046.     ELSE
  1047.         RestartListEmpty = 1
  1048.     END IF
  1049. END FUNCTION
  1050.  
  1051.  
  1052. '*************************************************************************
  1053. FUNCTION ExitExecRestart STATIC AS INTEGER
  1054.     ExitExecRestart = FExitExecRestart
  1055. END FUNCTION
  1056.  
  1057.  
  1058. '*************************************************************************
  1059. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  1060.  
  1061.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  1062.         ERROR STFERR
  1063.     END IF
  1064. END SUB
  1065.  
  1066.  
  1067.  
  1068. '**************************************************************************
  1069. '***************************  Error Handlers  *****************************
  1070. '**************************************************************************
  1071.  
  1072.  
  1073.  
  1074. TRAP CleanupTrap From "MSSHLSTF.DLL"
  1075.  
  1076. End Trap
  1077.  
  1078. hSetup = InitSetup(COMMAND$)
  1079.  
  1080. ON ERROR GOTO QUIT
  1081.  
  1082.